package ub.pis.net;

import java.util.ArrayList;
import java.util.List;

import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.Attributes;

import ub.pis.Artista;
/**
 * Clase handler para extraer los artistas relacionados del archivo xml que
 * retorna last.fm
 * @author nagash
 *
 */
public class RelatedAXMLHandler extends DefaultHandler {
	private Artista artistaActual;
	private List<Artista> a_relacionados;
	private StringBuilder sbTexto;
	private boolean image;

	public void characters(char[] ch, int start, int length)
			throws SAXException {
		super.characters(ch, start, length);

		if (this.artistaActual != null)
			sbTexto.append(ch, start, length);
	}

	public void startDocument() throws SAXException {

		super.startDocument();

		a_relacionados = new ArrayList<Artista>();
		sbTexto = new StringBuilder();
	}

	/**
	 * Si encuentra una imagen tamaño mega, image = true
	 */
	public void startElement(String uri, String localName, String name,
			Attributes attributes) throws SAXException {

		super.startElement(uri, localName, name, attributes);

		if (localName.equals("artist")) {
			artistaActual = new Artista();
			image = false;
		}else if(localName.equals("image") && attributes.getValue("size").equals("mega")){
			image = true;
		}
	}

	@Override
	public void endElement(String uri, String localName, String name)
			throws SAXException {

		super.endElement(uri, localName, name);

		if (this.artistaActual != null) {

			if (localName.equals("name")) {
				artistaActual.setNom(sbTexto.toString().trim());
			} else if (localName.equals("image") && image) {
				artistaActual.setImgUrl(sbTexto.toString().trim());
				image = false;
			}else if (localName.equals("artist")) {
				a_relacionados.add(artistaActual);
			}

			sbTexto.setLength(0);
		}
	}

	/**
	 * Retorna la lista de artistas relacionados (objetos tipo Artista)
	 * @return List<Artista>
	 */
	public List<Artista> getA_relacionados() {
		return a_relacionados;
	}

}
